package com.qin.mall.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qin.mall.domain.UmsAdmin;
import com.qin.mall.domain.UmsResource;
import com.qin.mall.domain.UmsRole;
import com.qin.mall.dto.UmsAdminParam;
import com.qin.mall.dto.UpdateAdminPasswordParam;
import com.qin.mall.common.api.CommonResult;
import com.qin.mall.common.domain.UserDto;
import com.baomidou.mybatisplus.extension.service.IService;
//import com.qin.mall.result.CommonResult;
//import org.springframework.security.core.userdetails.UserDetails;

import java.util.List;

/**
* @author 覃剑
* @description 针对表【ums_admin(后台用户表)】的数据库操作Service
* @createDate 2022-11-11 09:51:38
*/
public interface UmsAdminService extends IService<UmsAdmin> {

    /**
     * 根据用户名获取后台管理员
     */
    UmsAdmin getAdminByUsername(String username);

    /**
     * 注册功能
     */
    UmsAdmin register(UmsAdminParam umsAdminParam);

    /**
     * 登录功能
     * @param username 用户名
     * @param password 密码
     * @return 生成的JWT的token
     */
    CommonResult login(String username, String password);

    /**
     * 刷新token的功能
     * @param oldToken 旧的token
     */
    String refreshToken(String oldToken);

    /**
     * 根据用户id获取用户
     */
    UmsAdmin getItem(Long id);

    /**
     * 根据用户名或昵称分页查询用户
     */
    List<UmsAdmin> list(String keyword, Integer pageNum, Integer pageSize);

    /**
     * 修改指定用户信息
     */
    int update(Long id, UmsAdmin admin);

    /**
     * 删除指定用户
     */
    int delete(Long id);

    /**
     * 修改用户角色关系
     */
    int updateRole(Long adminId, List<Long> roleIds);

    /**
     * 获取用户对应角色
     */
    List<UmsRole> getRoleList(Long adminId);

    /**
     * 获取指定用户的可访问资源
     */
    List<UmsResource> getResourceList(Long adminId);

    /**
     * 修改密码
     */
    int updatePassword(UpdateAdminPasswordParam param);

    /**
     * 获取用户信息
     */
    UserDto loadUserByUsername(String username);

    /**
     * 获取当前登录后台用户
     */
    UmsAdmin getCurrentAdmin();

    /**
     * 获取缓存服务
     */
    UmsAdminCacheService getCacheService();
}
